/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.catalog;

import com.losalpes.persistence.entity.Inventario;
import com.losalpes.persistence.entity.Mueble;
import com.losalpes.persistence.entity.TipoMueble;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Local;

/**
 *
 * @author c.alvarez947
 */
@Local
public interface ICatalogService {

    /**
     * Crea un mueble
     * @param cMueble Mueble a crear
     */
    void add(Mueble cMueble);

      /**
     * Elimina un mueble del catalogo
     * @param cMueble Mueble a eliminar
     */
    void delete(String cReferencia);

    int CantidadMuebles();

  
    //void remove(Mueble cMueble);

    /**
     * Actualiza el mueble
     * @param cMueble mueble a actualizar
     */
    void update(Mueble cMueble);

    /**
     * Retorna un mueble cuya referencia coincida
     * con el criterio de busqueda ingresado
     * @param referencia numero de referencia del mueble
     * @return Producto mueble que coincide con el criterio
     * de busqueda
     */
    Mueble findMuebleById(String referencia);

    /**
     * Retorna todos los muebles que conforman
     * el catalogo
     * @return Listado de muebles
     */
    List<Mueble> findAllMuebles();

    /**
     * Retorna el listado de muebles cuyo tipoProducto
     * coincide con el criterio de busqueda ingresado
     * @param tipoProducto tipoProducto del mueble
     * @return Listado de muebles que coinciden con
     * el criterio de busqueda
     */
    ArrayList<Mueble> findMuebleByTipo(TipoMueble tipoProducto);

    /**
     * Retorna el listado de muebles cuyo nombre
     * coincide con el criterio de busqueda ingresado
     * @param nombreProducto Nombre del producto
     * @return Listado de muebles que coincide con
     * el criterio de busqueda
     */
    ArrayList<Mueble> findMuebleByName(String nombreProducto);

    /**
     * Metodo usado para agregar/actualizar un mueble
     * al inventario
     * @param inventario Objeto a agregar/actualizar en el inventario
     */
    void addInventario(Inventario inventario);

    /**
     * Metodo usado para actualizar el inventario una vez se haya realizado
     * la compra
     * @param referencia numero de referencia del mueble
     * @param cantidad numero de muebles a descargar
     */
    void updateInventario(ArrayList<Inventario> productosAdquiridos);

    /**
     * Retorna el inventario en una lista.
     * @return Listado del inventario
     * %&%
     */
    ArrayList<Inventario> findAllInventario();

    /**
     * Retorna el listado del inventario cuya referencia
     * coincide con el criterio de busqueda ingresado
     * @param referencia del mueble
     * @return Listado de inventario que coinciden con
     * el criterio de busqueda
     */
    Inventario findInventarioMuebleByRef(String referencia);

    /**
     * carga el inventario de un mueble especÃ­fico
     * @param pReferencia
     * @return objeto inventario
     */
    Inventario findInventarioMueble(String pReferencia) ;


    Mueble getMueblebyRef(String cReferencia);

    ArrayList<Mueble> findMuebleByRef(String referencia);
}
